home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / utils / shade10 / shade10.doc < prev    next >
Text File  |  1993-12-11  |  10KB  |  281 lines

  1. ---------------------------------------------------------------------------
  2.                                   Shade
  3.                      (S)till (h)as (a) (d)umb nam(e)
  4.  
  5.                           Version 1.0 12/14/93
  6.  
  7.                    Copyright (C) 1993, Theodore C. Yapo
  8. ---------------------------------------------------------------------------
  9.  
  10. 0.5)                 ------Hardware requirements------
  11.  
  12. Shade requires a '386 or better computer with VGA.  A '486 or better is
  13. recommended.  A math coprocessor is required (it might be built into your
  14. '486).
  15.  
  16.    (It might work with less, but you'd be very dissapointed by the speed)
  17.  
  18.  
  19. 1.0)              ------What is this "shade" anyway?------
  20.  
  21. Shade is a utility for viewing shaded 3-d models in real time. The program
  22. allows you to rotate the model automatically or manually, change the scale,
  23. lightsource parameters, flat/smooth shading mode, and other stuff.
  24.  
  25. The package comes with several pre-built models suitable for demos, and since
  26. the input files are all ASCII and completely explained in this document, you
  27. can easily create your own 3-d models to view.
  28.  
  29. The controls can be set using a small instruction set, or interactively
  30. once the program is running.  Alternatively, parameters can be piped into
  31. the program which can be the last stage in some 3-d viewing application.
  32. (A 3-d surface plotter would be such an example).
  33.  
  34. 2.0)                    ------Show me something!-----
  35.  
  36. Run the demo batch file.  This will give you an idea of what the program
  37. is capable of, and of the speed at which your machine can run it.  The
  38. real fun comes when you run it interactively, so read on...
  39.  
  40.  
  41. 3.0)                   -----Running Interactively------
  42.  
  43. Pick a simple *.shd file to test the interatctive mode.  The star.shd
  44. file which comes with the package is a good starting point.
  45.  
  46. To run the program interactively, type
  47.  
  48. shade <filename.shd>
  49.  
  50. and then type "go" at the ")" prompt.
  51.  
  52. Whatever file you chose should appear, shaded and rotating at (hopefully)
  53. some decent rate.  If the display is too slow, press the "-" key a few
  54. times.  This will reduce the size of the model, and should make it
  55. somewhat faster.  Now try the following keys: 
  56.  
  57.    
  58. key                    function
  59.  
  60. p                      toggles auto phi rotation
  61. t                      toggles auto theta rotation
  62. ->                     moves theta manually, or changes rate (auto mode)
  63. <-                     '' but reverse
  64. (up arrow)             moves phi manually, or changes rate (auto mode)
  65. (down arrow)           '' but reverse
  66. -                      decreases scale (makes smaller)
  67. +                      increases scale (makes larger)
  68. PgUp                   increase brightness
  69. PgDn                   decrease brightness
  70. Home                   increase ambient lighting
  71. End                    decrease ambient lighting
  72. f                      toggle flat / Gouraud (smooth) mode
  73. s                      toggle sun synchronous mode
  74. c                      toggle backface culling
  75. esc | q                quits
  76.  
  77.  
  78. note that the functions are not independent, for example setting
  79. sun-synchronous mode while culling is on and in flat render mode
  80. will allow you to see only the triangles that were visible from
  81. a previous viewpoint...hard to explain, but easy to see.
  82.  
  83. also, the rotation rates can be increased to infinity or
  84. thereabouts, so you'll find yourself testing the Nyquist theorem
  85. if you try to go too fast.
  86.  
  87.  
  88. 4.0)               ------Running in batch mode-------
  89.  
  90. You can run shade in a batch-style mode.  This allows you to set the
  91. parameters from a file, and then view the result.  For example, running
  92. shade like:
  93.  
  94. shade file.shd < parmfile
  95.  
  96. will read the commands in the file "parmfile" into shade, and load the
  97. file "file.shd" containg a 3-d model.  Note that if you want to do this,
  98. the last line of the parameter file should contain the command
  99. "go".
  100.  
  101. To see the commands that can be used type "help" at the ")" prompt.
  102.  
  103. To see the parameters which can be set, type "show" at the ")" prompt.
  104.  
  105. I have had quite a bit of success using shade as a 3-d previewer when 
  106. creating objects using BASIC.  I wite a BASIC program to create a scene
  107. file, then include the line
  108.  
  109. SHELL "shade10.exe object.shd"
  110.  
  111. at the end of the program.  Each time the program is run, then, it allows
  112. me to view the object.  I have found this to be a good visualization tool.
  113.  
  114.  
  115. 5.0)                     ------File Format------
  116.  
  117. The file format is a simple ASCII file containing 3-d positions for
  118. a number of points, and a number of triangles defined over these points.
  119. The exact format is:
  120.  
  121. ---------------------
  122. number of points
  123. x1 y1 z1
  124. x2 y2 z2
  125. ...
  126. xn yn zn
  127.  
  128. number of triangles
  129. p11 p12 p13 shade1
  130. p21 p22 p23 shade2
  131. p31 p32 p33 shade3
  132. ...
  133. pm1 pm2 pm3 shadem
  134. ---------------------
  135.  
  136.  
  137. 5.1)                      ------Points------
  138.  
  139. The points themselves can be any floating-point values.  They are
  140. automatically scaled to the appropriate values internally.  The center
  141. of rotation is chosen as the center of mass (C.O.M.) of the points.  If you 
  142. don't like where this places the center, you can add a single extra point
  143. to move the center of mass anywhere you desire.  The details of such a
  144. scheme are left as an exercise to the reader (I always wanted to say
  145. that), but here's a rough sketch:
  146.  
  147.  <----------a-----------> <--------b---------->
  148. +------------------------+- - - - - - - - - - -+
  149. current                desired               extra 
  150. C.O.M.                  C.O.M.               point
  151.  
  152. b = number_of_original_points * a
  153.  
  154. (If this becomes numerically difficult, put in two or more extra points)
  155.  
  156.  
  157. 5.2)                     ------Triangles------
  158.  
  159. The triangles are defined by specifying the verticies in counter-clockwise
  160. order when viewed from the outside of the surface, and an shade for that
  161. triangle.  As defined, the normal to the surface points outside.  Be careful
  162. of the point order in defining these triangles, because they can only be
  163. seen from the outside! (unless you turn culling off).
  164.  
  165.          1------2
  166.          |     /
  167.          |  ------> Normal
  168.  inside  | / outside
  169.          3
  170.  
  171. the normal direction shown is obtained by
  172. specifying the points in any of the following
  173. orders:
  174.  
  175. 2 1 3
  176. 1 3 2
  177. 3 2 1
  178.  
  179. (note that these orders obey a "right hand" rule -
  180. wrap the fingers of your right hand around the triangle
  181. in any of these orders, and your thumb gives the normal
  182. direction)
  183.  
  184.  
  185. 5.2.1)                    ------Shades------
  186.  
  187. The shade value for each triangle determines the intrinsic "color" of
  188. the triangle.  The actual values of the pixels that the traingle is drawn
  189. with are derived from the shade value by applying the illumination model.
  190. This allows you to define some dark triangles and some light (to make a
  191. checkerboard, for instance)
  192.  
  193. Shade values for triangles should be floating point values between 0 and 1.
  194.  
  195.  
  196. 5.3)                 ------Triangle Meshes-----
  197.  
  198. To make a model work with smooth (Gouraud) shading, it must be defined
  199. as a mesh.  This means that the points of the model are shared by more
  200. than one triangle.  If you have a set of traingles each defined
  201. by three individual 3-d points, you'll have to convert this into a
  202. mesh for smooth shading to work (it will also be much faster).  The
  203. easiest way to do this is to write a program which "collapses"
  204. points less than some distance from each other, and then writes
  205. the result as a *.shd file.  I have experimented with such a program, and
  206. if there is enough demand, I will clean it up and release it.
  207.  
  208. example mesh of 16 triangles :
  209.  
  210.  1 ----- 2 ----- 3 ----- 4 ----- 5
  211.  |    /  |    /  |    /  |    /  |
  212.  |  /    |  /    |  /    |  /    |
  213.  6 ----- 7 ----- 8 ----- 9 ----- 10
  214.  |    /  |    /  |    /  |    /  |
  215.  |  /    |  /    |  /    |  /    |
  216.  11----- 12----- 13----- 14----- 15
  217.  
  218. *.shd file for mesh:
  219.  
  220. 15
  221. x1 y1 z1
  222. .
  223. .
  224. .
  225. x15 y15 z15
  226.  
  227. 16
  228. 2 1 6
  229. 7 2 6
  230. 3 2 7
  231. 8 3 7
  232. .
  233. .
  234. .
  235. 15 10 14
  236.  
  237.  
  238. 6.0)                     ------Known Bugs------
  239.  
  240. The number of points in an object is limited to 1900, and the number of 
  241. triangles is limited to 2900.  Scenes much larger than this would probably
  242. be terribly slow on todays hardware (at least on mine) anyway.  This is
  243. a segment problem, and could be fixed if needed.
  244.  
  245. There are occasionally some "dropouts" in certain frames.  This is
  246. probably the fault of the low-level triangle drawing and interpolating code.
  247. Even though it's written in C, I haven't found the time to chase all the
  248. bugs down.  At most, a few pixels are not written when they should be.  (This
  249. bug is probably more annoying to me than anyone else.)
  250.  
  251. 7.0)                   ------Acknowledgements------
  252.  
  253. Special thanks to Roddy Collins for keyboard, culling, and other clues.
  254.  
  255. 8.0)                      -----Whats Next?------
  256.  
  257. I'm currently working on the following additions:  Hopefully they will
  258. make it into a future release.
  259.  
  260.    * color triangles (still shaded, of course)
  261.    * a mode for (non-real-time) rendering in a large format into a *.pnm file
  262.    * a flat_triangle flag so that you can have some flat, some smooth
  263.    * and the ever popular much, much more...
  264.  
  265.  
  266. 9.0)                     -----Contacting Me-----
  267.  
  268. If you have questions, comments, etc., you can contact me at the address
  269. below or via email at:
  270.  
  271.     yapot@rpi.edu
  272.  
  273. If you intend to use this program for commercial purposes,
  274. please send a donation ($35 sounds about right) to:
  275.  
  276.     Ted Yapo
  277.     c/o 87 Rivercliff Dr.
  278.     Milford, CT 06460
  279.  
  280. ----------------------------------------------------------------------------
  281.